#pragma warning disable 108
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using Cephei;
using Cephei.Core;
using Cephei.Core.Generic;
using Microsoft.FSharp.Core;
using Cephei.QL.Models.Marketmodels;
namespace Cephei.QL.Models.Marketmodels.Browniangenerators
{
    /// <summary> 
	/// ! Incremental Brownian generator using a Mersenne-twister uniform generator and inverse-cumulative Gaussian method.  \note At this time, generation of the underlying uniform sequence is eager, while its transformation into Gaussian variates is lazy.  Further optimization might be possible by using the Mersenne twister directly instead of a RandomSequenceGenerator; however, it is not clear how much of a difference this would make when compared to the inverse-cumulative Gaussian calculation.
	/// </summary>
    [Guid ("806A2337-F068-4193-9F9B-2EA65FEF4F55"),ComVisible(true)]
	public interface IMTBrownianGenerator : Cephei.QL.Models.Marketmodels.IBrownianGenerator
	{
		///////////////////////////////////////////////////////////////
        // Methods
        //
        /// <summary> 
		/// 
		/// </summary>
		 Double NextPath {get;}
        /// <summary> 
		/// 
		/// </summary>
		 Double NextStep(Cephei.Core.IVector<Double> output);
        /// <summary> 
		/// 
		/// </summary>
		 UInt64 NumberOfFactors {get;}
        /// <summary> 
		/// 
		/// </summary>
		 UInt64 NumberOfSteps {get;}
    }   

    /// <summary> 
	/// ! Incremental Brownian generator using a Mersenne-twister uniform generator and inverse-cumulative Gaussian method.  \note At this time, generation of the underlying uniform sequence is eager, while its transformation into Gaussian variates is lazy.  Further optimization might be possible by using the Mersenne twister directly instead of a RandomSequenceGenerator; however, it is not clear how much of a difference this would make when compared to the inverse-cumulative Gaussian calculation. Factory
	/// </summary>
   	[ComVisible(true)]
    public interface IMTBrownianGenerator_Factory 
    {
        ///////////////////////////////////////////////////////////////
        // Factory methods
        //
        /// <summary> 
		/// 
		/// </summary>
	    IMTBrownianGenerator Create (UInt64 factors, UInt64 steps);
    }
}

